import { useState, useDebugValue } from 'react';
import { IAsyncState, createInitialAsyncState } from './IAsyncState';

/**
 * 返回一个 async state 的跟踪状态，供 asCall 系列函数将异步操作过程和状态同步到此跟踪状态
 * @param name dev-tools 中的 hook 的调试名称
 */
export function useAsyncState(name?: string) {
  useDebugValue(name);
  const [state, setState] = useState<IAsyncState>(createInitialAsyncState);
  state.ss = setState; // 状态包括了自己的 setter，就可以像 vue 类似直接在状态上修改
  return state;
}
